home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / doc / interpreter / install.tex < prev    next >
Text File  |  1997-08-13  |  20KB  |  559 lines

  1. @c Copyright (C) 1996, 1997 John W. Eaton
  2. @c This is part of the Octave manual.
  3. @c For copying conditions, see the file gpl.tex.
  4.  
  5. @c The text of this file will eventually appear in the file INSTALL
  6. @c in the Octave distribution, as well as in the Octave manual.
  7.  
  8. @ifclear INSTALLONLY
  9. @node Installation, Emacs, Trouble, Top
  10. @appendix Installing Octave
  11. @end ifclear
  12.  
  13. @ifset INSTALLONLY
  14. @include conf.tex
  15.  
  16. This file documents the installation of Octave.
  17.  
  18. Octave is free software; you can redistribute it and/or modify it
  19. under the terms of the GNU General Public License as published by the
  20. Free Software Foundation.
  21.  
  22. @node Installation,  , Installation
  23. @chapter Installing Octave
  24. @end ifset
  25.  
  26. @cindex installing Octave
  27.  
  28. Here is the procedure for installing Octave from scratch on a Unix
  29. system.  For instructions on how to install the binary distributions of
  30. Octave, see @ref{Binary Distributions}.
  31.  
  32. @itemize @bullet
  33. @item
  34. Run the shell script @file{configure}.  This will determine the features
  35. your system has (or doesn't have) and create a file named
  36. @file{Makefile} from each of the files named @file{Makefile.in}.
  37.  
  38. Here is a summary of the configure options that are most frequently used
  39. when building Octave:
  40.  
  41. @table @code
  42. @item --prefix=@var{prefix}
  43. Install Octave in subdirectories below @var{prefix}.  The default value
  44. of @var{prefix} is @file{/usr/local}.
  45.  
  46. @item --srcdir=@var{dir}
  47. Look for Octave sources in the directory @var{dir}.
  48.  
  49. @item --with-f2c
  50. Use @code{f2c} even if a Fortran compiler is available.
  51.  
  52. @item --with-g77
  53. Use @code{g77} to compile Fortran code.
  54.  
  55. @item --enable-shared
  56. Create shared libraries.  If you are planning to use
  57. @code{--enable-lite-kernelel} or the dynamic loading features, you will
  58. probably want to use this option.  It will make your @file{.oct} files
  59. much smaller and on some systems it may be necessary to build shared
  60. libraries in order to use dynamically linked functions.
  61.  
  62. You may also want to build a shared version of @code{libg++}, if your
  63. system doesn't already have one.  Note that a patch is needed to build
  64. shared versions of version 2.7.2 of @code{libg++} and @code{libstdc++}
  65. on the HP-PA architecture.  You can find the patch at
  66. @url{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}.
  67.  
  68. @item --enable-dl
  69. Use @code{dlopen} and friends to make Octave capable of dynamically
  70. linking externally compiled functions.  This only works on systems that
  71. actually have these functions.  If you plan on using this feature, you
  72. should probably also use @code{--enable-shared} to reduce the size of
  73. your @file{.oct} files.
  74.  
  75. @item --enable-shl
  76. Use @code{shl_load} and friends to make Octave capable of dynamically
  77. linking externally compiled functions.  This only works on systems that
  78. actually have these functions (only HP-UX systems).  If you plan on
  79. using this feature, you should probably also use @code{--enable-shared}
  80. to reduce the size of your @file{.oct} files.
  81.  
  82. @item --enable-lite-kernel
  83. Compile smaller kernel.  This currently requires the dynamic linking
  84. functions @code{dlopen} or @code{shl_load} and friends so that Octave
  85. can load functions at run time that are not loaded at compile time.
  86.  
  87. @item --help
  88. Print a summary of the options recognized by the configure script.
  89. @end table
  90.  
  91. See the file @file{INSTALL} for more information about the command line
  92. options used by configure.  That file also contains instructions for
  93. compiling in a directory other than where the source is located.
  94.  
  95. @item
  96. Run make.
  97.  
  98. You will need a recent version of GNU Make.  Modifying Octave's
  99. makefiles to work with other make programs is probably not worth
  100. your time.  We recommend you get and compile GNU Make instead.
  101.  
  102. For plotting, you will need to have gnuplot installed on your system.
  103. Gnuplot is a command-driven interactive function plotting program.
  104. Gnuplot is copyrighted, but freely distributable.  The `gnu' in gnuplot
  105. is a coincidence---it is not related to the GNU project or the FSF in
  106. any but the most peripheral sense.
  107.  
  108. For version @value{VERSION}, you must have the GNU C++ compiler
  109. (@code{gcc}) version 2.7.2 or later to compile Octave.  You will also
  110. need version 2.7.1 or 2.7.2 of the GNU C++ class library
  111. (@code{libg++}).  If you plan to modify the parser you will also need
  112. GNU @code{bison} and @code{flex}.  If you modify the documentation, you
  113. will need GNU Texinfo, along with the patch for the @code{makeinfo}
  114. program that is distributed with Octave.
  115.  
  116. GNU Make, @code{gcc}, and @code{libg++}, @code{gnuplot}, @code{bison},
  117. @code{flex}, and Texinfo are all available from many anonymous ftp
  118. archives.  The primary site is @url{prep.ai.mit.edu}, but it is often
  119. very busy.  A list of sites that mirror the software on @code{prep} is
  120. available by anonymous ftp from
  121. @url{ftp://prep.ai.mit.edu/pub/gnu/GNUinfo/FTP}, or by fingering 
  122. @email{fsf@@prep.ai.mit.edu}.
  123.  
  124. If you don't have a Fortran compiler, or if your Fortran compiler
  125. doesn't work like the traditional Unix f77, you will need to have the
  126. Fortran to C translator @code{f2c}.  You can get @code{f2c} from any
  127. number of anonymous ftp archives.  The most recent version of @code{f2c}
  128. is always available from @url{netlib.att.com}.
  129.  
  130. On an otherwise idle Pentium 133 running Linux, it will take somewhere
  131. between 1-1/2 to 3 hours to compile everything, depending on whether you
  132. are building shared libraries.  You will need about 100 megabytes of disk
  133. storage to work with (considerably less if you don't compile with debugging
  134. symbols).  To do that, use the command
  135.  
  136. @example
  137. make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
  138. @end example
  139.  
  140. @noindent
  141. instead of just @samp{make}.
  142.  
  143. @item
  144. If you encounter errors while compiling Octave, first check the list of
  145. known problems below to see if there is a workaround or solution for
  146. your problem.  If not,
  147. @ifclear INSTALLONLY
  148. see @ref{Trouble},
  149. @end ifclear
  150. @ifset INSTALLONLY
  151. see the file BUGS
  152. @end ifset
  153. for information about how to report bugs.
  154.  
  155. @item
  156. Once you have successfully compiled Octave, run @samp{make install}.
  157.  
  158. This will install a copy of octave, its libraries, and its documentation
  159. in the destination directory.  As distributed, Octave is installed in
  160. the following directories.  In the table below, @var{prefix} defaults to
  161. @file{/usr/local}, @var{version} stands for the current version number
  162. of the interpreter, and @var{arch} is the type of computer on which
  163. Octave is installed (for example, @samp{i586-unknown-gnu}).
  164.  
  165. @table @file
  166. @item @var{prefix}/bin
  167. Octave and other binaries that people will want to run directly.
  168.  
  169. @item @var{prefix}/lib
  170. Libraries like libcruft.a and liboctave.a.
  171.  
  172. @item @var{prefix}/share
  173. Architecture-independent data files.
  174.  
  175. @item @var{prefix}/include/octave
  176. Include files distributed with Octave.
  177.  
  178. @item @var{prefix}/man/man1
  179. Unix-style man pages describing Octave.
  180.  
  181. @item @var{prefix}/info
  182. Info files describing Octave.
  183.  
  184. @item @var{prefix}/share/octave/@var{version}/m
  185. Function files distributed with Octave.  This includes the Octave
  186. version, so that multiple versions of Octave may be installed at the
  187. same time.
  188.  
  189. @item @var{prefix}/lib/octave/@var{version}/exec/@var{arch}
  190. Executables to be run by Octave rather than the user.
  191.  
  192. @item @var{prefix}/lib/octave/@var{version}/oct/@var{arch}
  193. Object files that will be dynamically loaded.
  194.  
  195. @item @var{prefix}/share/octave/@var{version}/imagelib
  196. Image files that are distributed with Octave.
  197. @end table
  198. @end itemize
  199.  
  200. @menu
  201. * Notes::                       
  202. * Installation Problems::       
  203. * Binary Distributions::        
  204. @end menu
  205.  
  206. @node Notes, Installation Problems, Installation, Installation
  207. @appendixsec Notes
  208.  
  209. @itemize @bullet
  210. @item
  211. You must use the version of GNU Info distributed with Octave, because it
  212. includes some changes to allow Octave to search the indices of the info
  213. files.  If you would like, you should be able to replace other copies of
  214. the Info browser that you have with the one distributed with Octave.
  215. Patches relative to a recent release of the GNU Info browser are
  216. included in the file @file{INFO.PATCH} in the Octave source
  217. distribution.  This modification has been submitted to the GNU Info
  218. maintainer, and should appear in some future release.  Once that
  219. happens, the GNU Info browser will no longer be distributed with Octave.
  220. @end itemize
  221.  
  222. @node Installation Problems, Binary Distributions, Notes, Installation
  223. @appendixsec Installation Problems
  224.  
  225. This section contains a list of problems (and some apparent problems
  226. that don't really mean anything is wrong) that may show up during
  227. installation of Octave.
  228.  
  229. @itemize @bullet
  230. @item
  231. On some SCO systems, @code{info} fails to compile if
  232. @code{HAVE_TERMIOS_H} is defined int @file{config.h}.  Simply removing
  233. the definition from @file{info/config.h} should allow it to compile.
  234.  
  235. @item
  236. If @code{configure} finds @code{dlopen}, @code{dlsym}, @code{dlclose},
  237. and @code{dlerror}, but not the header file @file{dlfcn.h}, you need to
  238. find the source for the header file and install it in the directory
  239. @file{usr/include}.  This is reportedly a problem with Slackware 3.1.
  240. For Linux/GNU systems, the source for @file{dlfcn.h} is in the
  241. @code{ldso} package.
  242.  
  243. @item
  244. Building @file{.oct} files doesn't work.
  245.  
  246. You should probably have a shared version of @code{libg++}.  A patch is
  247. needed to build shared versions of version 2.7.2 of @code{libg++} and
  248. @code{libstdc++} on the HP-PA architecture.  You can find the patch at
  249. @url{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}.
  250.  
  251. @item
  252. If you encounter errors like
  253.  
  254. @smallexample
  255. @group
  256. passing `void (*)()' as argument 2 of
  257.   `octave_set_signal_handler(int, void (*)(int))'
  258. @end group
  259. @end smallexample
  260.  
  261. @noindent
  262. or
  263.  
  264. @smallexample
  265. warning: ANSI C++ prohibits conversion from `(int)' to `(...)'
  266. @end smallexample
  267.  
  268. @noindent
  269. while compiling @file{sighandlers.cc}, you may need to edit some files
  270. in the @code{gcc} include subdirectory to add proper prototypes for functions
  271. there.  For example, Ultrix 4.2 needs proper declarations for the
  272. @code{signal} function and the @code{SIG_IGN} macro in the file
  273. @file{signal.h}.
  274.  
  275. On some systems the @code{SIG_IGN} macro is defined to be something like
  276. this:
  277.  
  278. @example
  279. #define  SIG_IGN  (void (*)())1
  280. @end example
  281.  
  282. @noindent
  283. when it should really be something like:
  284.  
  285. @example
  286. #define  SIG_IGN  (void (*)(int))1
  287. @end example
  288.  
  289. @noindent
  290. to match the prototype declaration for the @code{signal} function.  This
  291. change should also be made for the @code{SIG_DFL} and @code{SIG_ERR}
  292. symbols. It may be necessary to change the definitions in
  293. @file{sys/signal.h} as well.
  294.  
  295. The @code{gcc} @code{fixincludes} and @code{fixproto} scripts should
  296. probably fix these problems when @code{gcc} installs its modified set of
  297. header files, but I don't think that's been done yet.
  298.  
  299. @strong{You should not change the files in @file{/usr/include}}.  You
  300. can find the @code{gcc} include directory tree by running the command
  301.  
  302. @example
  303. gcc -print-libgcc-file-name
  304. @end example
  305.  
  306. @noindent
  307. The directory of @code{gcc} include files normally begins in the same directory
  308. that contains the file @file{libgcc.a}.
  309.  
  310. @item
  311. There is a bug with the @code{makeinfo} program that is distributed with
  312. Texinfo (through version 3.9) that causes the indices in Octave's
  313. on-line manual to be generated incorrectly.  If you need to recreate the
  314. on-line documentation, you should get the @code{makeinfo} program that
  315. is distributed with texinfo-3.9 and apply the patch for @code{makeinfo}
  316. that is distributed with Octave.  See the file @file{MAKEINFO.PATCH} for
  317. more details.
  318.  
  319. @item
  320. Some of the Fortran subroutines may fail to compile with older versions
  321. of the Sun Fortran compiler.  If you get errors like
  322.  
  323. @smallexample
  324. zgemm.f:
  325.         zgemm:
  326. warning: unexpected parent of complex expression subtree
  327. zgemm.f, line 245: warning: unexpected parent of complex
  328.   expression subtree
  329. warning: unexpected parent of complex expression subtree
  330. zgemm.f, line 304: warning: unexpected parent of complex
  331.   expression subtree
  332. warning: unexpected parent of complex expression subtree
  333. zgemm.f, line 327: warning: unexpected parent of complex
  334.   expression subtree
  335. pcc_binval: missing IR_CONV in complex op
  336. make[2]: *** [zgemm.o] Error 1
  337. @end smallexample
  338.  
  339. @noindent
  340. when compiling the Fortran subroutines in the @file{libcruft}
  341. subdirectory, you should either upgrade your compiler or try compiling
  342. with optimization turned off.
  343.  
  344. @item
  345. On NeXT systems, if you get errors like this:
  346.  
  347. @example
  348. /usr/tmp/cc007458.s:unknown:Undefined local symbol LBB7656
  349. /usr/tmp/cc007458.s:unknown:Undefined local symbol LBE7656
  350. @end example
  351.  
  352. @noindent
  353. when compiling @file{Array.cc} and @file{Matrix.cc}, try recompiling
  354. these files without @code{-g}.
  355.  
  356. @item
  357. Some people have reported that calls to shell_cmd and the pager do not
  358. work on SunOS systems.  This is apparently due to having
  359. @code{G_HAVE_SYS_WAIT} defined to be 0 instead of 1 when compiling
  360. @code{libg++}.
  361.  
  362. @item
  363. On NeXT systems, linking to @file{libsys_s.a} may fail to resolve the
  364. following functions
  365.  
  366. @example
  367. _tcgetattr
  368. _tcsetattr
  369. _tcflow
  370. @end example
  371.  
  372. @noindent
  373. which are part of @file{libposix.a}.  Unfortunately, linking Octave with
  374. @code{-posix} results in the following undefined symbols.
  375.  
  376. @example
  377. .destructors_used
  378. .constructors_used
  379. _objc_msgSend
  380. _NXGetDefaultValue
  381. _NXRegisterDefaults
  382. .objc_class_name_NXStringTable
  383. .objc_class_name_NXBundle
  384. @end example
  385.  
  386. One kluge around this problem is to extract @file{termios.o} from
  387. @file{libposix.a}, put it in Octave's @file{src} directory, and add it
  388. to the list of files to link together in the makefile.  Suggestions for
  389. better ways to solve this problem are welcome!
  390.  
  391. @item
  392. If Octave crashes immediately with a floating point exception, it is
  393. likely that it is failing to initialize the IEEE floating point values
  394. for infinity and NaN.
  395.  
  396. If your system actually does support IEEE arithmetic, you should be able
  397. to fix this problem by modifying the function @code{octave_ieee_init} in
  398. the file @file{lo-ieee.cc} to correctly initialize Octave's internal
  399. infinity and NaN variables.
  400.  
  401. If your system does not support IEEE arithmetic but Octave's configure
  402. script incorrectly determined that it does, you can work around the
  403. problem by editing the file @file{config.h} to not define
  404. @code{HAVE_ISINF}, @code{HAVE_FINITE}, and @code{HAVE_ISNAN}.
  405.  
  406. In any case, please report this as a bug since it might be possible to
  407. modify Octave's configuration script to automatically determine the
  408. proper thing to do.
  409. @end itemize
  410.  
  411. @node Binary Distributions,  , Installation Problems, Installation
  412. @appendixsec Binary Distributions
  413.  
  414. Although Octave is not very difficult to build from its sources, it is a
  415. relatively large program that does require a significant amount of time
  416. and disk space to compile and install.  Because of this, many people
  417. want to be able to obtain binary distributions so they can start using
  418. Octave immediately, without having to bother with the details of
  419. compiling it first.  This is understandable, so I try to maintain a
  420. current collection of binary distributions at
  421. @url{ftp://ftp.che.wisc.edu/pub/octave/BINARIES}.
  422.  
  423. Please understand, however, that there is only a limited amount of time
  424. available to devote to making binaries, so binaries may not be
  425. immediately available for some platforms.  (Please contact
  426. @email{bug-octave@@bevo.che.wisc.edu} if you are interested in helping
  427. make a binary distribution available for your system.)
  428.  
  429. Also, binary distributions are limited to static binaries that do not
  430. support dynamic linking.  For earlier versions of Octave, I tried
  431. distributing dynamically linked binaries but that proved to be too much
  432. trouble to support.  If you want to have a copy of Octave that includes
  433. all the features described in this manual, you will have to build it
  434. from the sources yourself, or find someone else who is willing to do it
  435. for you.
  436.  
  437. @menu
  438. * Installing Octave from a Binary Distribution::  
  439. * Creating a Binary Distribution::  
  440. @end menu
  441.  
  442. @node Installing Octave from a Binary Distribution, Creating a Binary Distribution, Binary Distributions, Binary Distributions
  443. @appendixsubsec Installing Octave from a Binary Distribution
  444.  
  445. To install Octave from a binary distribution, execute the command
  446.  
  447. @example
  448. sh ./install-octave
  449. @end example
  450.  
  451. @noindent
  452. in the top level directory of the distribution.
  453.  
  454. Binary distributions are normally compiled assuming that Octave will be
  455. installed in the following subdirectories of @file{/usr/local}.
  456.  
  457. @table @file
  458. @item bin
  459. Octave and other binaries that people will want to run directly.
  460.  
  461. @item lib
  462. Shared libraries that Octave needs in order to run.  These files are
  463. not included if you are installing a statically linked version of
  464. Octave.
  465.  
  466. @item man/man1
  467. Unix-style man pages describing Octave.
  468.  
  469. @item info
  470. Info files describing Octave.
  471.  
  472. @item share/octave/@var{version}/m
  473. Function files distributed with Octave.  This includes the Octave
  474. version, so that multiple versions of Octave may be installed at the
  475. same time.
  476.  
  477. @item libexec/octave/@var{version}/exec/@var{arch}
  478. Executables to be run by Octave rather than the user.
  479.  
  480. @item libexec/octave/@var{version}/oct/@var{arch}
  481. Object files that will be dynamically loaded.
  482.  
  483. @item share/octave/@var{version}/imagelib
  484. Image files that are distributed with Octave.
  485. @end table
  486.  
  487. @noindent
  488. where @var{version} stands for the current version number of the
  489. interpreter, and @var{arch} is the type of computer on which Octave
  490. is installed (for example, @samp{@value{TARGETHOSTTYPE}}).
  491.  
  492. If these directories don't exist, the script @code{install-octave} will
  493. create them for you.  The installation script also creates the following
  494. subdirectories of @file{/usr/local} that are intended for locally
  495. installed functions:
  496.  
  497. @table @file
  498. @item share/octave/site/m
  499. Locally installed M-files.
  500.  
  501. @item libexec/octave/site/exec/@var{arch}
  502. Locally installed binaries intended to be run by Octave rather than by
  503. the user.
  504.  
  505. @item libexec/octave/site/octave/@var{arch}
  506. Local object files that will be dynamically linked.
  507. @end table
  508.  
  509. If it is not possible for you to install Octave in @file{/usr/local}, or
  510. if you would prefer to install it in a different directory, you can
  511. specify the name of the top level directory as an argument to the
  512. @file{install-octave} script.  For example:
  513.  
  514. @example
  515. sh ./install-octave /some/other/directory
  516. @end example
  517.  
  518. @noindent
  519. will install Octave in subdirectories of the directory
  520. @file{/some/other/directory}.
  521.  
  522. @node Creating a Binary Distribution,  , Installing Octave from a Binary Distribution, Binary Distributions
  523. @appendixsubsec Creating a Binary Distribution
  524.  
  525. Here is how to build a binary distribution for others to use.  If you
  526. want to make a binary distribution for your system available along with
  527. the Octave sources and binaries on @url{ftp.che.wisc.edu}, please follow
  528. this procedure.  For directions explaining how to make the binary
  529. available on the ftp site, please contact
  530. @email{bug-octave@@bevo.che.wisc.edu}.
  531.  
  532. @itemize @bullet
  533. @item
  534. Unpack the source distribution:
  535.  
  536. @example
  537. gunzip -c octave-@value{VERSION}.tar.gz | tar xf -
  538. @end example
  539.  
  540. @item
  541. Change your current directory to the top-level directory of the source
  542. distribution:
  543.  
  544. @example
  545. cd octave-@value{VERSION}
  546. @end example
  547.  
  548. @item
  549. Make the binary distribution:
  550.  
  551. @example
  552. make binary-dist
  553. @end example
  554.  
  555. This will create a compressed tar file ready for distribution.
  556. It will contain statically linked binaries and have a name like
  557. @file{octave-@value{VERSION}-@value{TARGETHOSTTYPE}.tar.gz}
  558. @end itemize
  559.